﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.ServiceModel.DomainServices.Client;
using RIAExample.Web.Services;
using RIAExample.Web.Models;
using System.Windows.Data;
using RIAExample.Helpers;

namespace RIAExample.Views
{
    public partial class EdicaoProduto : ChildWindow
    {
        public Produto Produto { get; set; }

        private SupermercadoDomainContext SupermercadoDomainContext { get; set; }
        private LoadOperation<Supermercado> LoadSupermercado { get; set; }
        private readonly Operation operation;

        private Operation Operation
        {
            get { return operation; }
        }

        public EdicaoProduto(SupermercadoDomainContext supermercadoDomainContext)
        {
            SupermercadoDomainContext = supermercadoDomainContext;
            Produto = new Produto();
            operation = Operation.Insert;
            
            InitializeComponent();
        }

        public EdicaoProduto(SupermercadoDomainContext supermercadoDomainContext, Produto produto)
        {
            InitializeComponent();

            SupermercadoDomainContext = supermercadoDomainContext;
            Produto = produto;
            operation = Operation.Update;
        }

        private void DataForm_EditEnded(object sender, DataFormEditEndedEventArgs e)
        {
            if (e.EditAction == DataFormEditAction.Commit)
            {
                if (!Produto.HasValidationErrors)
                {
                    if(Operation == Operation.Insert)
                        SupermercadoDomainContext.Produtos.Add(Produto);
                    else if (Operation == Operation.Update)
                    {
                        var produto = SupermercadoDomainContext.Produtos.Where(p => p.ProdutoID == Produto.ProdutoID).SingleOrDefault();
                        produto.Descricao = Produto.Descricao;
                        produto.Preco = Produto.Preco;
                        produto.SupermercadoID = Produto.SupermercadoID;
                    }

                    SupermercadoDomainContext.SubmitChanges(SubmitChangesCompleted, null);
                }
            }
        }

        private void SubmitChangesCompleted(OperationBase so)
        {
            if (!so.HasError)
            {
                this.Close();
            }
            else
            {
                so.MarkErrorAsHandled();
                MessageBox.Show(so.Error.Message);
            }
        }

        private void DataForm_ContentLoaded(object sender, DataFormContentLoadEventArgs e)
        {
            EntityQuery<Supermercado> query = SupermercadoDomainContext.GetSupermercadoesQuery();
            LoadSupermercado = SupermercadoDomainContext.Load(query, lo => { OnLoadedSupermercado(lo); }, false);
        }

        private void OnLoadedSupermercado(LoadOperation lo)
        {
            Binding itemsSource = new Binding() { Source = lo.Entities };

            ComboBox cbxSupermercado = DataForm.FindNameInContent("cbxSupermercado") as ComboBox;
            cbxSupermercado.SetBinding(ComboBox.ItemsSourceProperty, itemsSource);

            if(Operation == Operation.Update)
                cbxSupermercado.SelectedItem = Produto.Supermercado;
        }
    }
}